#ifndef PARAS_H
#define PARAS_H

#include "head.h"

class Paras
{
public:

    static time_t time_now;//当前时间
    static time_t time_start;//开始时间
    static int runningTime;//运行时间
    
    static bool autoRun;//是否自动运行
    static QString configPath;//配置文件路径
    
    static QString cameraName;//相机名称
    static double cameraExposure;//相机曝光时间
    static QString cameraWb;//相机白平衡
    
    static QString PLCIP;//PLC IP
    static int PLCPort;//PLC端口

    static int cameraIndex;//相机索引
    static cv::VideoCapture cap;//相机
    static cv::Point resolution;//相机分辨率
    static bool is_cap_available;

    static int Work_model;//工作模式
    static int Work_state;//工作状态
    static QString product_name;//产品名称
    
    static QString matrix;//相机矫正矩阵
    static QString process_para;//图像处理参数

    static int cap_num;//抓取数量
    static int capacity;//产能
    static std::vector<int> cap_interval;//抓取间隔
    static std::vector<int> cap_angle;//抓取偏角
    static std::vector<int> cap_x;//抓取x坐标
    static std::vector<int> cap_y;//抓取y坐标

    static QString logPath;//日志文件路径
    static QString tempPath;//模板文件路径
    static QString modelName;//机型名称

    static QList<QCameraInfo> cameraList;//相机列表

    static QTimer *timerCapture;//定时器
    static QTimer *timerProcess;//定时器
    static int timerCaptureInterval;//定时器间隔
    static int timerProcessInterval;//定时器间隔

    static cv::Mat image;//图像
    static cv::Mat imageProcess;//图像处理
    static cv::Mat templateImage;//模板图像
    static cv::Mat fixedframe;//固定的图像
    static cv::Mat imageShow;//图像显示

    static QMutex frameMutexMat;//互斥锁
    static QMutex templateMutexMat;//互斥锁
    static QMutex mutexImg;//互斥锁
    static QMutex mutexCap;//互斥锁
    static QMutex mutexMode;//互斥锁
    static QMutex mutexTemp;//互斥锁
    static QMutex mutexImageShow;//互斥锁
    static QMutex fixedframeMutexMat;//互斥锁

    //模板标定
    static int currentPoint;//当前标定点 0-3:左上角、右上角、右下角、左下角 4:中心
    static cv::Point2d tempLeftTop;//模板左上角
    static cv::Point2d tempRightTop;//模板右上角
    static cv::Point2d tempRightButtom;//模板右下角
    static cv::Point2d tempLeftButtom;//模板左下角
    static cv::Point2d tempCenter;//模板中心
    static int tempwidth;//模板宽度
    static int tempheight;//模板高度
    static double tempangle;//模板角度

    static void readConfig();//读取配置文件
    static void writeConfig();//写入配置文件
    static void newConfig();//新建配置文件
    static bool checkConfig();//检查配置文件

    static void saveLog();//保存日志

    static void changeMode(int mode);//改变工作模式
};

#endif // PARAS_H